home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / asm / Tandem2.68.lha / Tandem / Teaching / 73.asm < prev    next >
Assembly Source File  |  2000-04-02  |  11KB  |  406 lines

  1. * 73.asm     Demonstrate TLreqedit   version 0.01    8.6.99
  2. *            Modified to allow TLputilbm of text
  3.  
  4.  
  5.  include 'Front.i'
  6.  
  7.  
  8. ; TLreqedit is a comlex and powerful routine. It allows you to format
  9. ; individual characters & whole lines in many different ways. Although
  10. ; this program is long, that is because of programming the various buttons
  11. ; in the demo. TLreqedit is itself easy to use.
  12.  
  13.  
  14. ;text & styl data
  15. text: ds.b 100             ;text
  16. styl: ds.b 100             ;styl
  17.  
  18. jam1: ds.l 1               ;-1 if jam1
  19. case: ds.l 1               ;<> if case
  20. styb: ds.l 1               ;<> if styb
  21. fixt: ds.l 1               ;<> if fixt
  22. cspc: ds.l 1               ;cspc
  23. maxj: ds.l 1               ;maxj
  24. wdth: ds.l 1               ;text wdth (600, or 500 if shrt)
  25. ltyp: ds.l 1               ;justification
  26. revs: ds.l 1               ;<> if reversed
  27. crsr: ds.l 1               ;cursor
  28.  
  29. ;strings
  30. strings: dc.b 0
  31.  dc.b 'Demonstrate TLreqedit',0 ;1
  32.  dc.b 'Font Jam1 Case Styb Fixt Cspc Maxj Shrt Save',0 ;2
  33.  dc.b 'Line formatting, editing',0 ;3
  34.  dc.b 'Font Style',0 ;4
  35.  dc.b 'Bold   Ctrl/B',0 ;5
  36.  dc.b 'Italic Ctrl/I',0 ;6
  37.  dc.b 'Wide   Ctrl/W',0 ;7
  38.  dc.b 'Shadow Ctrl/S',0 ;8
  39.  dc.b 'Superscript  Ctrl/Up arrow',0 ;9
  40.  dc.b 'Subscript    Ctrl/Dn arrow',0 ;10
  41.  dc.b 'Under/Overlining',0 ;11
  42.  dc.b 'Single Under Ctrl/U',0 ;12
  43.  dc.b 'Over         Ctrl/E',0 ;13
  44.  dc.b 'Under+Over   Ctrl/F',0 ;14
  45.  dc.b 'Double Under Ctrl/G',0 ;15
  46.  dc.b 'Dbl Under+Over  Ctrl/H',0 ;16
  47.  dc.b 'Dotted Under Ctrl/O',0 ;17
  48.  dc.b 'Strike Through  Ctrl/V',0 ;18
  49.  dc.b 'Justification',0 ;19
  50.  dc.b 'Right Justify  Ctrl/R',0 ;20
  51.  dc.b 'Full Justify   Ctrl/J',0 ;21
  52.  dc.b 'Center         Ctrl/C',0 ;22
  53.  dc.b 'Left Justify   Ctrl/L',0 ;23
  54.  dc.b 'Complement  Shift/Ctrl/C',0 ;24
  55.  dc.b 'Erase (x-out)  Ctrl/X',0 ;25
  56.  dc.b 'Undo        Shift/Ctrl/U',0 ;26
  57.  dc.b 'Restore     Shift/Ctrl/R',0 ;27
  58.  dc.b 'Space fill  Shift/Ctrl/S',0 ;28
  59.  dc.b 'Force Fixed    Ctrl/P',0 ;29
  60.  dc.b 'Specify inter-chr spaces (0-31, normally 0)',0 ;30
  61.  dc.b 'Draw Mode (Jam1 is demo only - not usually used if text editable)',0
  62.  dc.b 'Jam1  (normally for text display only)',0 ;32
  63.  dc.b 'Jam2  (for text display &/or text editing)',0 ;33
  64.  dc.b 'Fixed/Proportional',0 ;34
  65.  dc.b 'Force a proportional font to be shown fixed',0 ;35
  66.  dc.b 'Show font proportional/fixed as it normally is',0 ;36
  67.  dc.b 'Max full justify cspace (0-15 normally 5)(0 to force)',0 ;37
  68.  dc.b 'Show initial "AaBb" in chr style...',0 ;38
  69.  dc.b 'Unchanged - i.e. as "AaBb"',0 ;39
  70.  dc.b 'All upper case',0 ;40
  71.  dc.b 'All lower case',0 ;41
  72.  dc.b 'Small caps (works best for largish fonts)',0 ;42
  73.  dc.b 'Press <Help> for assistance!!!',0 ;43
  74.  dc.b 'Notes concerning this demo...',0 ;44
  75.  dc.b 0 ;45
  76.  dc.b '1. Click "Shrt" to make the demo make a short line, without',0
  77.  dc.b '   sideways scrolling, so you see better the effect of line',0 ;47
  78.  dc.b '   justification. Click it again so you can go back to',0
  79.  dc.b '   sideways scrolling.',0 ;49
  80.  dc.b 0 ;50
  81.  dc.b '2. If you choose "Jam1" the view mucks up when you type - this is',0
  82.  dc.b '   not a bug - jam1 is suitable for display only, but not typing.',0
  83.  dc.b '   The same applies also with case, which mucks up as soon as you',0
  84.  dc.b '   type. Have something showing before you choose either.',0 ;54
  85.  dc.b 0 ;55
  86.  dc.b '3. "Save" saves the tablet as an IFF file in RAM:Temp.iff',0 ;56
  87.  dc.b ' ',0 ;57
  88.  dc.b ' ',0 ;58
  89.  dc.b ' ',0 ;59
  90.  dc.b 'Style byte for text (e.g. 01=bold 02=italic)(0=none) 00-FF',0 ;60
  91.  dc.b 'RAM:Temp.iff',0 ;61 ;filename to save as IFF
  92.  
  93.  ds.w 0
  94.  
  95.  
  96. ment:
  97.  TLnm 1,3      ;Line formatting, editing
  98.  TLnm 2,4    ;  Font Style
  99.  TLnm 3,5    ;    Bold        Ctrl/b
  100.  TLnm 3,6    ;    Italic      Ctrl/i
  101.  TLnm 3,7    ;    Wide        Ctrl/w
  102.  TLnm 3,8    ;    Shadow      Ctrl/s
  103.  TLnm 3,9    ;    Superscript Ctrl/up
  104.  TLnm 3,10    ;    Subscript   Ctrl/down
  105.  TLnm 2,11    ;  Under/Overlining
  106.  TLnm 3,12    ;    Single Under   Ctrl/u
  107.  TLnm 3,13    ;    Over           Ctrl/e
  108.  TLnm 3,14    ;    Under+Over     Ctrl/f
  109.  TLnm 3,15    ;    Double Under   Ctrl/g
  110.  TLnm 3,16    ;    Dbl Under+Over Ctrl/h
  111.  TLnm 3,17    ;    Dotted Under   Ctrl/o
  112.  TLnm 3,18    ;    Strike Through
  113.  TLnm 2,19    ;  Justification
  114.  TLnm 3,20    ;    Right Justify Ctrl/r
  115.  TLnm 3,21    ;    Full Justify  Ctrl/j
  116.  TLnm 3,22    ;    Center        Ctrl/c
  117.  TLnm 3,23    ;    Left Justify  Ctrl/l
  118.  TLnm 3,29    ;    Force Fixed   Ctrl/p
  119.  TLnm 2,24    ;  Complement
  120.  TLnm 2,25    ;  Erase (x-out)  Ctrl/x
  121.  TLnm 2,26    ;  Undo           Shift/Ctrl/u
  122.  TLnm 2,27    ;  Restore        Shift/Ctrl/r
  123.  TLnm 2,28    ;  Space fill     Shift/Ctrl/s
  124.  TLnm 4,0      ;(End)
  125.  
  126.  
  127. ;demonstrate TLReqedit
  128. Program:
  129.  TLwindow #-1
  130.  TLwindow #0,#0,#0,#640,xxp_Height(a4),#640,xxp_Height(a4),#0,#strings+1
  131.  beq Pr_bad
  132.  TLreqinfo #44,#16         ;preliminary info
  133.  
  134.  TLreqmenu #ment           ;init menu
  135.  beq Pr_bad
  136.  TLreqmuset
  137.  
  138.  clr.l jam1                ;init line format data
  139.  clr.l case
  140.  clr.l styb
  141.  clr.l fixt
  142.  clr.l cspc
  143.  clr.l ltyp
  144.  move.l #5,maxj
  145.  move.l #600,wdth
  146.  clr.l revs
  147.  clr.l crsr
  148.  
  149.  lea text,a0               ;init text
  150.  clr.b (a0)
  151.  
  152.  tst.l case
  153.  bne.s Pr_some
  154.  tst.l jam1
  155.  beq.s Pr_none
  156. Pr_some:
  157.  move.l #'AaBb',(a0)       ;some init if case or jam1
  158.  clr.b 4(a0)
  159. Pr_none:
  160.  
  161.  clr.l styl
  162.  clr.b styl+4
  163.  
  164. Pr_font:                   ;choose a font
  165.  TLaslfont #1
  166.  beq Pr_bad
  167.  
  168. Pr_edit:                   ;(re-)edit the text
  169.  TLreqcls
  170.  TLnewfont #0,#0,#0
  171.  TLstring #2,#10,#5
  172.  moveq #6,d0
  173.  moveq #8,d1
  174. Pr_boxes:
  175.  TLreqbev d0,#4,#40,#10
  176.  add.w #40,d0
  177.  dbra d1,Pr_boxes
  178.  
  179.  move.l xxp_AcWind(a4),a5  ;advise to ask for help
  180.  move.w #$0200,xxp_FrontPen(a5)
  181.  TLstring #43,#382,#5
  182.  subq.b #1,xxp_FrontPen(a5)
  183.  
  184.  TLnewfont #1,#0,#0
  185.  bne.s Pr_cont
  186.  
  187. Pr_badf:
  188.  move.l #10,xxp_errn(a4)
  189.  bra Pr_bad
  190.  
  191. Pr_cont:
  192.  move.l xxp_AcWind(a4),a5
  193.  move.w #$0100,xxp_FrontPen(a5)
  194.  
  195.  move.l xxp_FSuite(a4),a0  ;set d7 = font ysize
  196.  add.w #xxp_fsiz,a0
  197.  move.l xxp_plain(a0),a1
  198.  moveq #0,d7
  199.  move.w tf_YSize(a1),d7
  200.  
  201.  addq.w #2,d7              ;box around tablet
  202.  TLreqarea #6,#19,#504,d7,#2
  203.  TLreqbev #6,#19,#504,d7,box,,#3
  204.  
  205.  sub.w #140,a7             ;room for 17 tags
  206.  move.l a7,a0
  207.  move.l #xxp_xtext,(a0)+   ;tag 1:  text address
  208.  move.l #text,(a0)+
  209.  tst.l styb                ;(no styl address if styb)
  210.  bne.s Pr_tag3
  211.  move.l #xxp_xstyl,(a0)+   ;tag 2:  styl address
  212.  move.l #styl,(a0)+
  213. Pr_tag3:
  214.  move.l #xxp_xmaxt,(a0)+   ;tag 3:  tablet width
  215.  move.l #500,(a0)+
  216.  move.l #xxp_xmaxw,(a0)+   ;tag 4:  max line width
  217.  move.l wdth,(a0)+
  218.  move.l #xxp_xmaxc,(a0)+   ;tag 5:  max chrs
  219.  move.l #80,(a0)+
  220.  move.l #xxp_xcrsr,(a0)+   ;tag 6:  crsr
  221.  move.l crsr,(a0)+
  222.  move.l #xxp_xmenu,(a0)+   ;tag 7:  use menu 0
  223.  move.l #0,(a0)+
  224.  move.l #xxp_xforb,(a0)+   ;tag 8:  forbids - none
  225.  clr.l (a0)+
  226.  move.l #xxp_xjam1,(a0)+   ;tag 9:  jam1
  227.  move.l jam1,(a0)+
  228.  move.l #xxp_xcase,(a0)+   ;tag 10: case
  229.  move.l case,(a0)+
  230.  move.l #xxp_xstyb,(a0)+   ;tag 11: styb
  231.  move.l styb,(a0)+
  232.  move.l #xxp_xffix,(a0)+   ;tag 12: fixt
  233.  move.l fixt,(a0)+
  234.  move.l #xxp_xcspc,(a0)+   ;tag 13: cspc
  235.  move.l cspc,(a0)+
  236.  move.l #xxp_xmaxj,(a0)+   ;tag 14: maxj
  237.  move.l maxj,(a0)+
  238.  move.l #xxp_xfgbg,(a0)+   ;tag 15: pens
  239.  move.l #$00000100,(a0)+
  240.  move.l #xxp_xltyp,(a0)+   ;tag 16: ltyp
  241.  move.l ltyp,(a0)+
  242.  move.l #xxp_xrevs,(a0)+   ;tag 17: revs
  243.  move.w revs,d0
  244.  ext.l d0
  245.  move.l d0,(a0)+
  246.  clr.l (a0)                ;delimit tags
  247.  move.l a7,a0
  248.  TLreqedit #8,#20,a0       ;do the edit
  249.  add.w #140,a7
  250.  
  251.  move.l xxp_FWork(a4),a0   ;save the results
  252.  move.l a0,a1
  253.  add.w #256,a1
  254.  lea text,a2
  255.  clr.b 99(a0)              ;(max 99 chrs to be safe - can't be >80?)
  256.  lea styl,a3
  257. Save:
  258.  move.b (a1)+,(a3)+
  259.  move.b (a0)+,(a2)+
  260.  bne Save
  261.  
  262.  move.b xxp_chnd+2(a4),d4  ;get final ltyp
  263.  and.b #3,d4
  264.  move.b d4,ltyp+3
  265.  move.l xxp_crsr(a4),crsr  ;get final crsr
  266.  
  267.  cmp.w #5,d0               ;go if click off tablet
  268.  beq.s Pr_clik
  269.  cmp.w #1,d0               ;quit if Esc
  270.  beq Pr_quit
  271.  cmp.w #13,d0              ;quit if close window
  272.  beq Pr_quit
  273.  cmp.w #8,d0               ;recycle if 0-7
  274.  bcs Pr_edit
  275.  cmp.w #12,d0              ;recycle if 12+
  276.  bcc Pr_edit
  277.  bra Pr_badf               ;else, bad (only can't attach font possible)
  278.  
  279. Pr_clik:
  280.  move.l xxp_AcWind(a4),a5
  281.  move.l xxp_kybd+4(a4),d0
  282.  sub.w xxp_LeftEdge(a5),d0
  283.  bcs Pr_edit
  284.  move.l xxp_kybd+8(a4),d1
  285.  sub.w xxp_TopEdge(a5),d1
  286.  bcs Pr_edit
  287.  sub.w #6,d0
  288.  bcs Pr_edit
  289.  divu #40,d0               ;d0 = 0-8 if box clicked
  290.  cmp.w #9,d0
  291.  bcc Pr_edit
  292.  cmp.w #4,d1
  293.  bcs Pr_edit
  294.  cmp.w #15,d1
  295.  bcc Pr_edit
  296.  cmp.w #1,d0
  297.  bcs Pr_font               ;go to whichever box clicked
  298.  beq Pr_jam1
  299.  cmp.w #3,d0
  300.  bcs Pr_case
  301.  beq Pr_styb
  302.  cmp.w #5,d0
  303.  bcs Pr_fixt
  304.  beq Pr_cspc
  305.  cmp.w #7,d0
  306.  bcs Pr_maxj
  307.  beq Pr_shrt
  308.  cmp.w #9,d0
  309.  bcs Pr_revs
  310.  bra Pr_edit
  311.  
  312. Pr_jam1:                   ;get jam1 (0/-1)
  313.  clr.l jam1
  314.  TLreqchoose #31,#2
  315.  cmp.w #1,d0
  316.  bne Pr_edit
  317.  subq.l #1,jam1
  318.  bra Pr_edit
  319.  
  320. Pr_case:                   ;get case (0-3)
  321.  TLreqchoose #38,#4
  322.  subq.l #1,d0
  323.  bcs Pr_edit
  324.  move.l d0,case
  325.  bra Pr_edit
  326.  
  327. Pr_styb:                   ;get styb (0,1-255)
  328.  clr.b (a4)
  329.  TLreqinput #60,hex,#2
  330.  beq Pr_edit
  331.  move.b d0,styb+3
  332.  bra Pr_edit
  333.  
  334. Pr_fixt:                   ;get fixt (0/-1)
  335.  clr.l fixt
  336.  TLreqchoose #34,#2
  337.  cmp.w #1,d0
  338.  bne Pr_edit
  339.  subq.l #1,fixt
  340.  bra Pr_edit
  341.  
  342. Pr_cspc:                   ;get cspc (0-31)
  343.  clr.b (a4)
  344.  TLreqinput #30,num,#2
  345.  beq Pr_edit
  346.  cmp.w #32,d0
  347.  bcc Pr_cspc
  348.  move.l d0,cspc
  349.  bra Pr_edit
  350.  
  351. Pr_maxj:                   ;get maxj (0-15)
  352.  clr.b (a4)
  353.  TLreqinput #37,num,#2
  354.  beq Pr_edit
  355.  cmp.w #16,d0
  356.  bcc Pr_maxj
  357.  move.l d0,maxj
  358.  bra Pr_edit
  359.  
  360. Pr_shrt:
  361.  tst.l revs               ;(forbid choosing long if revs)
  362.  bmi Pr_edit
  363.  move.l wdth,d0
  364.  move.l #500,wdth
  365.  cmp.l #600,d0
  366.  beq Pr_edit
  367.  move.l #600,wdth
  368.  bra Pr_edit
  369.  
  370. Pr_revs:                   ;quick & dirty dump of tablet to RAM:Temp.iff
  371.  
  372. ;###########
  373.  
  374.  moveq #6,d4               ;set d4,d5 = posn of tablet on screen
  375.  moveq #19,d5
  376.  move.l xxp_AcWind(a4),a5  ;add offset of window interior
  377.  add.w xxp_LeftEdge(a5),d4
  378.  add.w xxp_TopEdge(a5),d5
  379.  move.l xxp_Window(a5),a0
  380.  add.w wd_LeftEdge(a0),d4  ;add screen offset of window
  381.  add.w wd_TopEdge(a0),d5
  382.  
  383.  move.l xxp_FSuite(a4),a0  ;set d7 = font ysize
  384.  add.w #xxp_fsiz,a0
  385.  move.l xxp_plain(a0),a1
  386.  moveq #0,d7
  387.  move.w tf_YSize(a1),d7
  388.  
  389.  addq.w #2,d7              ;box around tablet = 6,19,504,d7
  390.  
  391.  TLstrbuf #61              ;filename to buffer
  392.  move.l xxp_Screen(a4),a1  ;a1 = the workbench screen
  393.  move.l sc_RastPort+rp_BitMap(a1),a0 ;a0 = the workbench screen's bitmap
  394.  TLputilbm d4,d5,#504,d7,a0  ;save the tablet as RAM:Temp.iff
  395.  
  396. ;###########
  397.  
  398.  bra Pr_edit
  399.  
  400. Pr_bad:                    ;here to report error
  401.  TLerror
  402.  TLreqchoose
  403.  
  404. Pr_quit:
  405.  rts
  406.